1
จากชุดข้อมูลตัวอย่างสู่ความวุ่นวายในโลกจริง
EvoClass-AI002บทเรียนที่ 5
00:00

1. สะพานเชื่อมช่องว่าง: พื้นฐานการโหลดข้อมูล

โมเดลเรียนรู้ลึก (Deep Learning) จะเติบโตได้ดีกับข้อมูลที่สะอาดและสม่ำเสมอ แต่ชุดข้อมูลในโลกจริงมักมีความยุ่งเหยิงโดยธรรมชาติ เราจำเป็นต้องเปลี่ยนจากแหล่งข้อมูลมาตรฐานที่จัดเตรียมไว้แล้ว (เช่น MNIST) มาสู่การจัดการกับแหล่งข้อมูลที่ไม่มีโครงสร้าง ซึ่งการโหลดข้อมูลเองกลายเป็นงานที่ซับซ้อน การวางรากฐานของกระบวนการนี้อยู่ที่เครื่องมือเฉพาะทางของ PyTorch สำหรับการจัดการข้อมูล

ปัญหาหลักคือการแปลงข้อมูลดิบและกระจายตัว (ภาพ ข้อความ ไฟล์เสียง) ที่เก็บอยู่บนดิสก์ให้กลายเป็นรูปแบบ รูปแบบเทนเซอร์ที่ต้องการจากหน่วยประมวลผลกราฟิก (GPU) ซึ่งต้องใช้ตรรกะเฉพาะสำหรับการจัดทำดัชนี การโหลด การประมวลผลก่อน และในท้ายที่สุด คือการจัดกลุ่มข้อมูลเป็นชุดเล็กๆ

ความท้าทายสำคัญในข้อมูลจริง

  • ความยุ่งเหยิงของข้อมูล: ข้อมูลกระจัดกระจายอยู่ตามโฟลเดอร์หลายแห่ง โดยมักจะถูกดัชนีผ่านไฟล์ CSV เพียงอย่างเดียว
  • ต้องมีการประมวลผลก่อน: ภาพอาจต้องมีการปรับขนาด การปรับมาตรฐาน หรือเพิ่มข้อมูล (augmentation) ก่อนที่จะแปลงเป็นเทนเซอร์
  • เป้าหมายด้านประสิทธิภาพ: ข้อมูลต้องถูกส่งไปยัง GPU ในรูปแบบกลุ่มที่เหมาะสมและไม่หยุดชะงัก เพื่อเพิ่มความเร็วในการฝึกโมเดลให้สูงสุด
แนวทางแก้ไขของ PyTorch: การแยกหน้าที่ออกเป็นส่วนๆ
PyTorch กำหนดให้มีการแยกหน้าที่อย่างชัดเจน: คลาส Dataset จัดการกับ "อะไร" (วิธีเข้าถึงตัวอย่างและลาเบลเดี่ยวๆ) ส่วนที่ DataLoader จัดการกับ "วิธีการ" (การจัดกลุ่มอย่างมีประสิทธิภาพ การสับเปลี่ยนลำดับ และการส่งข้อมูลแบบหลายเธรด)
data_pipeline.py
เทอร์มินัลbash — data-env
> เตรียมพร้อมแล้ว คลิก "รัน" เพื่อเริ่มทำงาน
>
ตัวตรวจสอบเทนเซอร์สด

รันโค้ดเพื่อดูเทนเซอร์ที่กำลังใช้งานอยู่
คำถามที่ 1
หน้าที่หลักของคลาส PyTorch Dataset คืออะไร?
จัดตัวอย่างให้เป็นชุดย่อยและสับเปลี่ยนลำดับ
กำหนดตรรกะสำหรับดึงตัวอย่างที่ผ่านการประมวลผลแล้วครั้งละตัว
ดำเนินการคูณเมทริกซ์ภายในโมเดล
คำถามที่ 2
พารามิเตอร์ใดที่ทำให้สามารถโหลดข้อมูลแบบขนานด้วยคอร์ CPU หลายตัว?DataLoader ช่วยให้สามารถโหลดข้อมูลแบบขนานได้โดยใช้คอร์ CPU หลายตัว?
device_transfer
batch_size
num_workers
async_load
คำถามที่ 3
หากภาพดิบของคุณมีขนาดต่างกันทั้งหมด องค์ประกอบใดเป็นผู้รับผิดชอบหลักในการปรับขนาดให้เท่ากัน (เช่น $224 \times 224$)?
ของ DataLoader คือ collate_fn.
โปรเซสเซอร์รูปภาพเฉพาะของ GPU
ฟังก์ชันการแปลงที่ใช้ภายในเมธอด __getitem__ ของ Dataset
ความท้าทาย: แบบจำลองตัวโหลดภาพเฉพาะ
กำหนดโครงสร้างที่จำเป็นสำหรับการจำแนกภาพในโลกจริง
คุณกำลังสร้างคลาส CustomDataset สำหรับภาพ 10,000 ภาพ ที่ถูกดัชนีผ่านไฟล์ CSV หนึ่งไฟล์ ที่มีเส้นทางและลาเบล
ขั้นตอนที่ 1
เมธอดที่จำเป็นต้องมี ต้องส่งคืนจำนวนตัวอย่างทั้งหมดคืออะไร?
คำตอบ:
เมธอด __len__ ของ Dataset
Concept: Defines the epoch size.
ขั้นตอนที่ 2
ลำดับขั้นตอนที่ถูกต้องภายใน __getitem__(self, index)?
คำตอบ:
1. ค้นหาเส้นทางไฟล์โดยใช้ index.
2. โหลดข้อมูลดิบ (เช่น ภาพ)
3. ใช้การแปลงที่จำเป็นtransforms.
4. ส่งคืนเทนเซอร์ที่ประมวลผลแล้วและลาเบล